package displayboardinfo.messages;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.Hibernate;

import displayboardinfo.entities.Room;

/**
 * Odpowiedź usługi listowania gabinetów.
 * Zobacz również: {@link displayboardinfo.services.RoomsServices#list()}}
 * 
 * @author Artur Jaworski
 */
@XmlRootElement
public class ListRoomsRes {
	
	private ArrayList<Room> rooms;
	
	/**
	 * Domyślny konstruktor bezargumentowy
	 */
	public ListRoomsRes() {
		setRooms(new ArrayList<Room>());
	}
	
	/**
	 * Pobranie listy gabinetów.
	 * 
	 * @return lista gabinetów
	 */
	@XmlElementWrapper ( name = "rooms" )
	@XmlElement ( name = "room" )
	public ArrayList<Room> getRooms() {
		return rooms;
	}

	/**
	 * Ustawienie listy gabinetów.
	 * Pojedyncze gabinety należy dodawać używając metody {@link #addRoom(Room)}
	 * 
	 * @param rooms lista gabinetów
	 */
	public void setRooms(ArrayList<Room> rooms) {
		this.rooms = rooms;
	}
	
	/**
	 * Dodanie pojedynczego gabinetu do listy gabinetów.
	 * W celu uniknięcia odwołań cyklicznych zerowane są następujące pola:
	 * <ul>
	 * <li> {@link Room#getAdmissions()} </li>
	 * <li> {@link Room#getRegisteredForUpdates()} </li>
	 * <li> {@link Room#getUsers()} </li>
	 * <li> {@link Room#getVisits()} </li>
	 * </ul>
	 * 
	 * @param room gabinet dodawany do listy
	 */
	public void addRoom(Room room){
		Hibernate.initialize(room);
		
		room.setAdmissions(null);
		room.setRegisteredForUpdates(null);
		room.setUsers(null);
		room.setVisits(null);
		
		this.rooms.add(room);
	}
	
}
